package hr.ctg.domain.model;

import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.validator.NotNull;

@Entity
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Table(name = "smjestaj")
// @NamedQueries( { @NamedQuery(name = "Smjestaj.findByIdObjekta", query =
// "select t from Smjestaj t where t.objekt.idObjekta = ?") })
public class Smjestaj implements Serializable {

	@Id
	// @GeneratedValue(generator = "foreign")
	// @GenericGenerator(name = "foreign", strategy = "foreign", parameters = {
	// @Parameter(name = "property", value = "objekt") })
	@Column(name = "id_objekta", unique = true, nullable = false)
	@NotNull
	private Integer idObjekta;

	private Integer sobe;

	@Column(name = "povrsina_kamp_mjesta")
	private Integer povrsinaKampMjesta;

	@Column(name = "udlj_do_zrac_luke")
	private Integer udljDoZracLuke;

	@Column(name = "udlj_do_heliodroma")
	private Integer udljDoHeliodroma;

	@Column(name = "udlj_do_traj_luke")
	private Integer udljDoTrajLuke;

	@Column(name = "udlj_do_ljekarne")
	private Float udljDoLjekarne;

	@Column(name = "udlj_do_ambulante")
	private Float udljDoAmbulante;

	@Column(name = "udlj_do_mjenjacnice")
	private Float udljDoMjenjacnice;

	@Column(name = "udlj_do_benzinske_postaje")
	private Float udljDoBenzinskePostaje;

	@Column(name = "udlj_do_najbl_grada")
	private Integer udljDoNajblGrada;

	@Column(name = "udlj_do_centra_mjesta")
	private Float udljDoCentraMjesta;

	@Column(name = "udlj_do_trgovine")
	private Integer udljDoTrgovine;

	@Column(name = "mjesta_za_kuc_na_kot")
	private Integer mjestaZaKucNaKot;

	@Column(name = "udlj_do_parka_prirode")
	private Float udljDoParkaPrirode;

	@Column(name = "udlj_do_plaze")
	private Integer udljDoPlaze;

	@Column(name = "sanitarni_cvorovi")
	private Integer sanitarniCvorovi;

	private Integer osobe;

	private Integer povrsina;

	@Column(name = "konferencijske_dvorane")
	private Integer konferencijskeDvorane;

	private Integer kreveti;

	private Integer parcele;

	private Integer kat;

	@Column(name = "pomocni_kreveti")
	private Integer pomocniKreveti;

	@Column(name = "bracni_kreveti")
	private Integer bracniKreveti;

	@Column(name = "jednostruki_kreveti")
	private Integer jednostrukiKreveti;

	@Column(name = "udlj_od_mora")
	private Integer udljOdMora;

	@Temporal(TemporalType.DATE)
	@Column(name = "otvoreno_od")
	private Date otvorenoOd;
	@Temporal(TemporalType.DATE)
	@Column(name = "otvoreno_do")
	private Date otvorenoDo;

	@Column(name = "minimalni_boravak")
	private Integer minimalniBoravak;

	@Temporal(TemporalType.TIME)
	@Column(name = "check_in")
	private java.util.Date checkIn;

	@Temporal(TemporalType.TIME)
	@Column(name = "check_out")
	private java.util.Date checkOut;

	private Integer kupaonice;
	@Column(name = "povrsina_terase")
	private Integer povrsinaTerase;
	@Column(name = "povrsina_zemljista")
	private Integer povrsinaZemljista;
	@Column(name = "jednokrevetne_sobe")
	private Integer jednokrevetneSobe;
	@Column(name = "dvokrevetne_sobe")
	private Integer dvokrevetneSobe;
	@Column(name = "trokrevetne_sobe")
	private Integer trokrevetneSobe;
	private Integer apartmani;
	// @OneToOne(fetch = FetchType.LAZY)
	// @JoinColumn(name = "id_objekta", unique=true)
	// @NotNull
	// private Objekt objekt;

	private static final long serialVersionUID = 1L;

	public Smjestaj() {
		super();
	}

	public Integer getSobe() {
		return sobe;
	}

	public void setSobe(final Integer sobe) {
		this.sobe = sobe;
	}

	public Integer getPovrsinaKampMjesta() {
		return povrsinaKampMjesta;
	}

	public void setPovrsinaKampMjesta(final Integer povrsinaKampMjesta) {
		this.povrsinaKampMjesta = povrsinaKampMjesta;
	}

	public Integer getUdljDoZracLuke() {
		return udljDoZracLuke;
	}

	public void setUdljDoZracLuke(final Integer udljDoZracLuke) {
		this.udljDoZracLuke = udljDoZracLuke;
	}

	public Integer getUdljDoHeliodroma() {
		return udljDoHeliodroma;
	}

	public void setUdljDoHeliodroma(final Integer udljDoHeliodroma) {
		this.udljDoHeliodroma = udljDoHeliodroma;
	}

	public Integer getUdljDoTrajLuke() {
		return udljDoTrajLuke;
	}

	public void setUdljDoTrajLuke(final Integer udljDoTrajLuke) {
		this.udljDoTrajLuke = udljDoTrajLuke;
	}

	public Float getUdljDoLjekarne() {
		return udljDoLjekarne;
	}

	public void setUdljDoLjekarne(final Float udljDoLjekarne) {
		this.udljDoLjekarne = udljDoLjekarne;
	}

	public Float getUdljDoAmbulante() {
		return udljDoAmbulante;
	}

	public void setUdljDoAmbulante(final Float udljDoAmbulante) {
		this.udljDoAmbulante = udljDoAmbulante;
	}

	public Float getUdljDoMjenjacnice() {
		return udljDoMjenjacnice;
	}

	public void setUdljDoMjenjacnice(final Float udljDoMjenjacnice) {
		this.udljDoMjenjacnice = udljDoMjenjacnice;
	}

	public Float getUdljDoBenzinskePostaje() {
		return udljDoBenzinskePostaje;
	}

	public void setUdljDoBenzinskePostaje(final Float udljDoBenzinskePostaje) {
		this.udljDoBenzinskePostaje = udljDoBenzinskePostaje;
	}

	public Integer getUdljDoNajblGrada() {
		return udljDoNajblGrada;
	}

	public void setUdljDoNajblGrada(final Integer udljDoNajblGrada) {
		this.udljDoNajblGrada = udljDoNajblGrada;
	}

	public Float getUdljDoCentraMjesta() {
		return udljDoCentraMjesta;
	}

	public void setUdljDoCentraMjesta(final Float udljDoCentraMjesta) {
		this.udljDoCentraMjesta = udljDoCentraMjesta;
	}

	public Integer getUdljDoTrgovine() {
		return udljDoTrgovine;
	}

	public void setUdljDoTrgovine(final Integer udljDoTrgovine) {
		this.udljDoTrgovine = udljDoTrgovine;
	}

	public Integer getMjestaZaKucNaKot() {
		return mjestaZaKucNaKot;
	}

	public void setMjestaZaKucNaKot(final Integer mjestaZaKucNaKot) {
		this.mjestaZaKucNaKot = mjestaZaKucNaKot;
	}

	public Float getUdljDoParkaPrirode() {
		return udljDoParkaPrirode;
	}

	public void setUdljDoParkaPrirode(final Float udljDoParkaPrirode) {
		this.udljDoParkaPrirode = udljDoParkaPrirode;
	}

	public Integer getUdljDoPlaze() {
		return udljDoPlaze;
	}

	public void setUdljDoPlaze(final Integer udljDoPlaze) {
		this.udljDoPlaze = udljDoPlaze;
	}

	public Integer getSanitarniCvorovi() {
		return sanitarniCvorovi;
	}

	public void setSanitarniCvorovi(final Integer sanitarniCvorovi) {
		this.sanitarniCvorovi = sanitarniCvorovi;
	}

	public Integer getOsobe() {
		return osobe;
	}

	public void setOsobe(final Integer osobe) {
		this.osobe = osobe;
	}

	public Integer getPovrsina() {
		return povrsina;
	}

	public void setPovrsina(final Integer povrsina) {
		this.povrsina = povrsina;
	}

	public Integer getKonferencijskeDvorane() {
		return konferencijskeDvorane;
	}

	public void setKonferencijskeDvorane(final Integer konferencijskeDvorane) {
		this.konferencijskeDvorane = konferencijskeDvorane;
	}

	public Integer getKreveti() {
		return kreveti;
	}

	public void setKreveti(final Integer kreveti) {
		this.kreveti = kreveti;
	}

	public Integer getParcele() {
		return parcele;
	}

	public void setParcele(final Integer parcele) {
		this.parcele = parcele;
	}

	public Integer getKat() {
		return kat;
	}

	public void setKat(final Integer kat) {
		this.kat = kat;
	}

	public Integer getPomocniKreveti() {
		return pomocniKreveti;
	}

	public void setPomocniKreveti(final Integer pomocniKreveti) {
		this.pomocniKreveti = pomocniKreveti;
	}

	public Integer getBracniKreveti() {
		return bracniKreveti;
	}

	public void setBracniKreveti(final Integer bracniKreveti) {
		this.bracniKreveti = bracniKreveti;
	}

	public Integer getJednostrukiKreveti() {
		return jednostrukiKreveti;
	}

	public void setJednostrukiKreveti(final Integer jednostrukiKreveti) {
		this.jednostrukiKreveti = jednostrukiKreveti;
	}

	public Integer getUdljOdMora() {
		return udljOdMora;
	}

	public void setUdljOdMora(final Integer udljOdMora) {
		this.udljOdMora = udljOdMora;
	}

	public Date getOtvorenoOd() {
		return otvorenoOd;
	}

	public void setOtvorenoOd(final Date otvorenoOd) {
		this.otvorenoOd = otvorenoOd;
	}

	public Date getOtvorenoDo() {
		return otvorenoDo;
	}

	public void setOtvorenoDo(final Date otvorenoDo) {
		this.otvorenoDo = otvorenoDo;
	}

	public Integer getMinimalniBoravak() {
		return minimalniBoravak;
	}

	public void setMinimalniBoravak(final Integer minimalniBoravak) {
		this.minimalniBoravak = minimalniBoravak;
	}

	public java.util.Date getCheckIn() {
		return checkIn;
	}

	public void setCheckIn(final java.util.Date checkIn) {
		this.checkIn = checkIn;
	}

	public java.util.Date getCheckOut() {
		return checkOut;
	}

	public void setCheckOut(final java.util.Date checkOut) {
		this.checkOut = checkOut;
	}

	public Integer getKupaonice() {
		return kupaonice;
	}

	public void setKupaonice(final Integer kupaonice) {
		this.kupaonice = kupaonice;
	}

	// public Objekt getObjekt() {
	// return objekt;
	// }
	//
	// public void setObjekt(final Objekt objekt) {
	// this.objekt = objekt;
	// this.idObjekta = objekt.getIdObjekta();
	// }

	public Integer getPovrsinaTerase() {
		return povrsinaTerase;
	}

	public void setPovrsinaTerase(final Integer povrTerase) {
		povrsinaTerase = povrTerase;
	}

	public Integer getCheckInSat() {
		if (checkIn != null) {
			final Calendar startTime = Calendar.getInstance();
			startTime.setTime(checkIn);
			return startTime.get(Calendar.HOUR_OF_DAY);
		}
		return null;
	}

	public Integer getCheckInMinute() {
		if (checkIn != null) {
			final Calendar startTime = Calendar.getInstance();
			startTime.setTime(checkIn);
			return startTime.get(Calendar.MINUTE);
		}
		return null;
	}

	public void setCheckInSat(final Integer sat) {
		if (null == sat)
			return;
		final Calendar startTime = Calendar.getInstance();
		startTime.setTimeInMillis(0);
		if (checkIn != null) {
			startTime.setTime(checkIn);
		}
		startTime.set(Calendar.HOUR_OF_DAY, sat);
		checkIn = startTime.getTime();
	}

	public void setCheckInMinute(final Integer minute) {
		if (null == minute)
			return;
		final Calendar startTime = Calendar.getInstance();
		startTime.setTimeInMillis(0);
		if (checkIn != null) {
			startTime.setTime(checkIn);
		}
		startTime.set(Calendar.MINUTE, minute);
		checkIn = startTime.getTime();
	}

	public Integer getCheckOutSat() {
		if (checkOut != null) {
			final Calendar startTime = Calendar.getInstance();
			startTime.setTime(checkOut);
			return startTime.get(Calendar.HOUR_OF_DAY);
		}
		return null;
	}

	public Integer getCheckOutMinute() {
		if (checkOut != null) {
			final Calendar startTime = Calendar.getInstance();
			startTime.setTime(checkOut);
			return startTime.get(Calendar.MINUTE);
		}
		return null;
	}

	public void setCheckOutSat(final Integer sat) {
		if (null == sat)
			return;
		final Calendar startTime = Calendar.getInstance();
		startTime.setTimeInMillis(0);
		if (checkOut != null) {
			startTime.setTime(checkOut);
		}
		startTime.set(Calendar.HOUR_OF_DAY, sat);
		checkOut = startTime.getTime();
	}

	public void setCheckOutMinute(final Integer minute) {
		if (null == minute)
			return;
		final Calendar startTime = Calendar.getInstance();
		startTime.setTimeInMillis(0);
		if (checkOut != null) {
			startTime.setTime(checkOut);
		}
		startTime.set(Calendar.MINUTE, minute);
		checkOut = startTime.getTime();
	}

	public Integer getPovrsinaZemljista() {
		return povrsinaZemljista;
	}

	public void setPovrsinaZemljista(final Integer povrsinaZemljista) {
		this.povrsinaZemljista = povrsinaZemljista;
	}

	public Integer getTrokrevetneSobe() {
		return trokrevetneSobe;
	}

	public void setTrokrevetneSobe(final Integer trokrevetneSobe) {
		this.trokrevetneSobe = trokrevetneSobe;
	}

	public Integer getApartmani() {
		return apartmani;
	}

	public void setApartmani(final Integer apartmani) {
		this.apartmani = apartmani;
	}

	public Integer getJednokrevetneSobe() {
		return jednokrevetneSobe;
	}

	public void setJednokrevetneSobe(final Integer jednokrevetneSobe) {
		this.jednokrevetneSobe = jednokrevetneSobe;
	}

	public Integer getDvokrevetneSobe() {
		return dvokrevetneSobe;
	}

	public void setDvokrevetneSobe(final Integer dvokrevetneSobe) {
		this.dvokrevetneSobe = dvokrevetneSobe;
	}

	public Integer getIdObjekta() {
		return idObjekta;
	}

	public void setIdObjekta(final Integer idObjekta) {
		this.idObjekta = idObjekta;
	}
}
